home *** CD-ROM | disk | FTP | other *** search
/ Mac-Source 1994 July / Mac-Source_July_1994.iso / C and C++ / Libraries / TurboTCP 1.0.1 / MiniTelnet.source / CMiniTelnetApp.cp next >
Text File  |  1993-12-10  |  7KB  |  331 lines

  1. /*
  2. ** CMiniTelnetApp.cp
  3. **
  4. **    MiniTelnet application
  5. **    Application subclass
  6. **
  7. **    Copyright © 1993, FrostByte Design / Eric Scouten
  8. **
  9. */
  10.  
  11.  
  12. #include "CMiniTelnetApp.h"
  13.  
  14. #ifndef TurboTCPHeaders
  15.     #include <Global.h>
  16.     #include <Commands.h>
  17.     #include <TBUtilities.h>
  18.     #include <CApplication.h>
  19.     #include <CBartender.h>
  20. #endif
  21.  
  22. #include <CDataFile.h>
  23. #include "CAboutDirector.h"
  24. #include "CTelnetTerminal.h"
  25. #include "CTelnetSettingsDLOG.h"
  26.  
  27.  
  28. // global TCL objects
  29.  
  30. extern CApplication    *gApplication;
  31. extern CBartender    *gBartender;
  32. extern OSType        gSignature;
  33. extern CursHandle    gWatchCursor;
  34. extern OSType        gSignature;
  35.  
  36.  
  37. //    —— initialization ——
  38.  
  39. /*______________________________________________________________________
  40. **
  41. ** IMiniTelnetApp
  42. **
  43. **    Initialize the application.
  44. **
  45. */
  46.  
  47. void CMiniTelnetApp::IMiniTelnetApp (void)
  48.  
  49. {
  50.     CTCPApplication::ITCPApplication(kExtraMasters, kRainyDayFund, kCriticalBalance, 
  51.                                 kToolboxBalance);
  52.     gSignature = kAppSignature;
  53. }
  54.  
  55.  
  56. /*______________________________________________________________________
  57. **
  58. ** SetUpFileParameters
  59. **
  60. **    What kind of files can we handle?
  61. **
  62. */
  63.  
  64. void CMiniTelnetApp::SetUpFileParameters (void)
  65.  
  66. {
  67.     CApplication::SetUpFileParameters();
  68.  
  69.     sfNumTypes = 1;
  70.     sfFileTypes[0] = kSettingsFileType;
  71.     gSignature = kAppSignature;
  72. }
  73.  
  74.  
  75. //    —— creation of Telnet sessions (documents) ——
  76.  
  77. /*______________________________________________________________________
  78. **
  79. ** CreateDocument
  80. **
  81. **    What happens to File->New from the menu. Creates a settings dialog rather than a session
  82. **    document. The dialog will open a session if the user so desires.
  83. **
  84. */
  85.  
  86. void CMiniTelnetApp::CreateDocument (void)
  87.  
  88. {
  89.     CTelnetSettingsDLOG *theDialog = NULL;
  90.     
  91.     TRY {
  92.         theDialog = new (CTelnetSettingsDLOG);
  93.         theDialog->ITelnetSettingsDLOG(this);
  94.         theDialog->DefaultSettings();
  95.         theDialog->BeginDialog();
  96.     }
  97.     
  98.     CATCH {
  99.         ForgetObject(theDialog);
  100.     }
  101.     ENDTRY;
  102. }
  103.  
  104.  
  105. /*______________________________________________________________________
  106. **
  107. ** OpenDocument
  108. **
  109. **    The user chose Open… from the File menu. Creates a new session
  110. **    with the contents of the settings file.
  111. **
  112. **    input:    1: (...) the settings file document to open
  113. **
  114. */
  115.  
  116. void CMiniTelnetApp::OpenDocument (SFReply *macSFReply)
  117.  
  118. {
  119.     TelnetSettingsRec newSettings;
  120.  
  121.     if (macSFReply->fType == kSettingsFileType) {
  122.         OpenSettingsFile(macSFReply, &newSettings);
  123.         NewSession(&newSettings);
  124.     }
  125. }
  126.  
  127.  
  128. /*______________________________________________________________________
  129. **
  130. ** OpenSettings
  131. **
  132. **    What happens to File->Open Settings from the menu. Creates a new settings dialog with the
  133. **    contents of the settings file.
  134. **
  135. **        macSFReply (SFReply *):    the settings file document to open
  136. **
  137. */
  138.  
  139. void CMiniTelnetApp::OpenSettings (SFReply *macSFReply)
  140.  
  141. {
  142.     CTelnetSettingsDLOG *theDialog = NULL;
  143.     TelnetSettingsRec    newSettings;
  144.     
  145.     OpenSettingsFile(macSFReply, &newSettings);
  146.  
  147.     TRY {
  148.         theDialog = new(CTelnetSettingsDLOG);
  149.         theDialog->ITelnetSettingsDLOG(this);
  150.         BlockMove(&newSettings, &(theDialog->r), sizeof(TelnetSettingsRec));
  151.         theDialog->PutSettings();
  152.         theDialog->BeginDialog();
  153.     }
  154.     
  155.     CATCH {
  156.         ForgetObject(theDialog);
  157.     }
  158.     ENDTRY;
  159.     
  160. }
  161.  
  162.  
  163. /*______________________________________________________________________
  164. **
  165. ** OpenSettingsFile
  166. **
  167. **    Read a Telnet settings document.
  168. **
  169. **        macSFReply (SFReply *):            the settings file document to read
  170. **        theSettings (TelnetSettingsRec *):    where to put the settings record
  171. **
  172. */
  173.  
  174. void CMiniTelnetApp::OpenSettingsFile (SFReply *macSFReply, TelnetSettingsRec *theSettings)
  175.  
  176. {
  177.     CDataFile    *itsFile = NULL;                // don’t need to keep the file around
  178.  
  179.  
  180.     // read the file
  181.     
  182.     TRY {
  183.         itsFile = new(CDataFile);
  184.         itsFile->IDataFile();
  185.         itsFile->SFSpecify(macSFReply);
  186.         itsFile->Open(fsRdPerm);
  187.         
  188.         itsFile->ReadSome((Ptr) theSettings, sizeof(TelnetSettingsRec));
  189.         itsFile->Close();
  190.         itsFile->Dispose();
  191.     }
  192.     
  193.     CATCH {
  194.         ForgetObject(itsFile);
  195.     }
  196.     ENDTRY;
  197. }
  198.  
  199.  
  200. /*______________________________________________________________________
  201. **
  202. ** NewSession
  203. **
  204. **    Create a new session from the settings record given.
  205. **
  206. **        newSettings (TelnetSettingsRec *):    the settings record which was opened
  207. **
  208. */
  209.  
  210. void CMiniTelnetApp::NewSession (TelnetSettingsRec *newSettings)
  211.  
  212. {
  213.     CTelnetTerminal    *newTerminal;
  214.  
  215.     newTerminal = new (CTelnetTerminal);
  216.     newTerminal->ITelnetTerminal(gApplication, kTelnetRecBufferSize, TRUE, kTelnetPort,
  217.                             kTelnetAutoRecSize, kTelnetAutoRecNum);
  218.     newTerminal->NewSession(newSettings);
  219.             // terminal session doc will dispose of itself if it fails
  220. }
  221.  
  222.  
  223. //    —— menu/command handling ——
  224.  
  225. /*______________________________________________________________________
  226. **
  227. ** DoCommand
  228. **
  229. **    Handle application-specific commands.
  230. **
  231. **        theCommand (long):    the command number which was issued
  232. **
  233. */
  234.  
  235. void CMiniTelnetApp::DoCommand (long theCommand)
  236.  
  237. {
  238.     Point            corner;
  239.     SFTypeList    fileTypes;
  240.     SFReply        macSFReply;
  241.     CAboutDirector    *theAboutDirector = NULL;
  242.  
  243.     switch (theCommand) {
  244.  
  245.         // About… command
  246.  
  247.         case cmdAbout:
  248.             theAboutDirector = new (CAboutDirector);
  249.             theAboutDirector->IAboutDirector(DLOGAboutBox, this);
  250.             theAboutDirector->DoAbout(FALSE, 0);
  251.             break;        
  252.  
  253.  
  254.         // open settings file
  255.  
  256.         case cmdOpenSettings:
  257.                                 // can’t use ChooseFile since subclass might
  258.                                 // have specified additional file types
  259.             fileTypes[0] = kSettingsFileType;
  260.             FindDlogPosition('DLOG', sfGetDLOGid, &corner);
  261.             SFPGetFile(corner, "\p", sfFileFilter, 1, fileTypes,
  262.                         sfGetDLOGHook, &macSFReply, sfGetDLOGid, sfGetDLOGFilter);
  263.  
  264.             if (macSFReply.good) {
  265.                 SetCursor(*gWatchCursor);
  266.                 OpenSettings(&macSFReply);
  267.             }
  268.             break;
  269.         
  270.         default:
  271.             CTCPApplication::DoCommand(theCommand);
  272.             break;
  273.     }
  274. }
  275.  
  276.  
  277. /*______________________________________________________________________
  278. **
  279. ** SetUpMenus
  280. **
  281. **    Set up menus which must be created at run time (e.g. Font menu).
  282. **
  283. */
  284.  
  285. void CMiniTelnetApp::SetUpMenus (void)
  286.  
  287. {
  288.     CApplication::SetUpMenus();
  289.     gBartender->SetUnchecking(MENUTelnet, TRUE);
  290. }
  291.  
  292.  
  293. /*______________________________________________________________________
  294. **
  295. ** UpdateMenus
  296. **
  297. **    Adjust menus on mouse-down event.
  298. **
  299. */
  300.  
  301. void CMiniTelnetApp::UpdateMenus (void)
  302.  
  303. {
  304.     CApplication::UpdateMenus();
  305.     gBartender->EnableCmd(cmdOpenSettings);
  306. }
  307.  
  308.  
  309. /*______________________________________________________________________
  310. **
  311. ** Run
  312. **
  313. **    Run the application. Overriden to provide splash screen.
  314. **
  315. */
  316.  
  317. void CMiniTelnetApp::Run (void)
  318.  
  319. {
  320.     CAboutDirector *theAboutDirector = NULL;
  321.  
  322.  
  323.     // show a splash screen (modified about… box), then run the app
  324.     
  325.     theAboutDirector = new (CAboutDirector);
  326.     theAboutDirector->IAboutDirector(DLOGAboutBox, this);
  327.     theAboutDirector->DoAbout(TRUE, kSplashScreenTicks);
  328.  
  329.     CApplication::Run();
  330.  
  331. }